/*
 * Copyright (c) 2014 pkzd/1.0, 颜文泽(robin)
 * All rights reserved.
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *     1 Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     2 Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include	<param.h>

.code16
.globl _start
_start:
        movl	$_start, %esp
	movw	$0x02, %ax
	int	$0x10
        movl    $DRV_NUM, %eax
        movb    %dl, (%eax)
        cmpb    $0x80, %dl
	jb	show_not_support_floppy	
	movw	$0x021e, %ax
	movw	$0x02, %cx  
	movb	$0x00, %dh 
	movw	$LOAD_ADDR, %bx
	int	$0x13
	jc	read_error	
	movb	$0x48, %ah
	movw	$DRV_PARAM, %si
	movw	$0x1e, (%si) 
	int	$0x13	
	jc	get_driver_parameters_failed
	movl	$LOAD_ADDR, %eax
	jmp	*%eax
show_not_support_floppy:
	movw	$disk_errorstr, %bp
	movw	disk_errorlen, %cx
	movw	$0x0000, %dx
	movw	$0x1301, %ax
	movw	$0x0007, %bx
	int	$0x10
	jmp	spin
read_error:
	movw	$read_errorstr, %bp
	movw	read_errorlen, %cx
	movw	$0x0100, %dx
	movw	$0x1301, %ax
	movw	$0x0007, %bx
	int	$0x10
	jmp	spin
get_driver_parameters_failed:
	movw	$driver_errorstr, %bp
	movw	driver_errorlen, %cx
	movw	$0x0200, %dx
	movw	$0x1301, %ax
	movw	$0x0007, %bx
	int	$0x10
spin:
	jmp	spin
disk_errorstr:
	.asciz "Don't support floppy"	
disk_errorlen:
	.word . - disk_errorstr - 1
read_errorstr:
	.asciz "Can't read init code for disk"	
read_errorlen:
	.word . - read_errorstr - 1
driver_errorstr:
	.asciz	"Get driver parameters failed"
driver_errorlen:
	.word . - driver_errorstr - 1
